উদাহরণ সহ Spring Boot Client Testing

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - Testing Spring Boot Clients
160

স্প্রিং বুট ক্লায়েন্টের টেস্টিং করতে হলে সাধারণত আপনি REST API কলগুলোর সঠিক কার্যকারিতা এবং ফলাফল নিশ্চিত করতে MockWebServer, MockRestServiceServer, অথবা WebClient-এর টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করবেন।


১. MockWebServer ব্যবহার করে টেস্টিং

MockWebServer হলো একটি টুল যা API কলগুলিকে মক করার জন্য ব্যবহৃত হয়। এটি সহজেই HTTP সার্ভার সিমুলেট করতে পারে।

Maven ডিপেন্ডেন্সি

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>mockwebserver</artifactId>
    <scope>test</scope>
</dependency>

পর্যায়ক্রমিক ধাপ:

Step 1: WebClient কনফিগার করা

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient(WebClient.Builder builder) {
        return builder.build();
    }
}

Step 2: সার্ভিস ক্লাস তৈরি

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

@Service
public class ApiService {

    @Autowired
    private WebClient webClient;

    public String getApiResponse(String url) {
        return webClient.get()
                .uri(url)
                .retrieve()
                .bodyToMono(String.class)
                .block(); // For synchronous testing
    }
}

Step 3: টেস্ট কেস লেখা

import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
public class ApiServiceTest {

    @Autowired
    private ApiService apiService;

    private MockWebServer mockWebServer;

    @BeforeEach
    void setUp() throws Exception {
        mockWebServer = new MockWebServer();
        mockWebServer.start();
    }

    @AfterEach
    void tearDown() throws Exception {
        mockWebServer.shutdown();
    }

    @Test
    void testGetApiResponse() {
        // Mock response
        mockWebServer.enqueue(new MockResponse()
                .setBody("{\"message\":\"Hello, World!\"}")
                .addHeader("Content-Type", "application/json"));

        String baseUrl = mockWebServer.url("/").toString();
        String response = apiService.getApiResponse(baseUrl);

        // Assertion
        assertEquals("{\"message\":\"Hello, World!\"}", response);
    }
}

২. MockRestServiceServer ব্যবহার করে টেস্টিং

MockRestServiceServer হল Spring Framework-এর একটি টুল, যা RestTemplate টেস্ট করতে ব্যবহৃত হয়।

Step 1: RestTemplate কনফিগার

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Step 2: সার্ভিস ক্লাস তৈরি

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class RestTemplateService {

    @Autowired
    private RestTemplate restTemplate;

    public String getApiResponse(String url) {
        return restTemplate.getForObject(url, String.class);
    }
}

Step 3: টেস্ট কেস লেখা

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;

import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
public class RestTemplateServiceTest {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private RestTemplateService restTemplateService;

    private MockRestServiceServer mockServer;

    @BeforeEach
    void setUp() {
        mockServer = MockRestServiceServer.createServer(restTemplate);
    }

    @Test
    void testGetApiResponse() {
        // Mock response
        String mockResponse = "{\"message\":\"Hello, RestTemplate!\"}";
        mockServer.expect(requestTo("http://mock-api.com"))
                .andRespond(withSuccess(mockResponse, org.springframework.http.MediaType.APPLICATION_JSON));

        String response = restTemplateService.getApiResponse("http://mock-api.com");

        // Assertion
        assertEquals("{\"message\":\"Hello, RestTemplate!\"}", response);
    }
}

৩. WebTestClient ব্যবহার করে টেস্টিং

WebTestClient একটি রিয়াক্টিভ টেস্ট টুল, যা WebClient-সহ অন্যান্য রিয়াক্টিভ স্ট্যাক টেস্ট করার জন্য ব্যবহৃত হয়।

Step 1: টেস্ট ক্লাসে WebTestClient Bean যোগ করা

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class WebClientIntegrationTest {

    @Autowired
    private WebTestClient webTestClient;

    @Test
    void testGetApi() {
        webTestClient.get().uri("/api/endpoint")
                .exchange()
                .expectStatus().isOk()
                .expectBody(String.class)
                .isEqualTo("{\"message\":\"Hello, WebClient!\"}");
    }
}

উপসংহার

  • MockWebServer: WebClient বা যেকোনো HTTP ক্লায়েন্ট টেস্ট করার জন্য।
  • MockRestServiceServer: RestTemplate টেস্ট করার জন্য।
  • WebTestClient: রিয়াক্টিভ স্ট্যাক বা WebClient টেস্ট করার জন্য।

এই পদ্ধতিগুলি ব্যবহার করে আপনি স্প্রিং বুট ক্লায়েন্টের কার্যকারিতা নির্ভরযোগ্যভাবে টেস্ট করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...